package tech.aistar.corejava.day09;

import java.util.Objects;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:
 * @date 2019/7/25 0025
 */
public class Student {
    private int id;

    private String sno;

    public Student(){

    }

    public Student(int id,String sno){
        this.id = id;
        this.sno = sno;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }

    public String getSno() {
        return sno;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Student{");
        sb.append("id=").append(id);
        sb.append(", sno='").append(sno).append('\'');
        sb.append('}');
        return sb.toString();
    }

    //手动重写equals方法


//    @Override
//    public boolean equals(Object obj) {
//        //1. 非空性
//        if(this == null)
//            return false;
//
//        //2. 自反性 - 自己跟自己比较
//        if(this == obj)
//            return true;
//
//        //3. 一致性
//        if(obj instanceof Student){//防止student对象和一个非student对象进行比较
//            Student s = (Student) obj;//父类强制转换子类 - 想要调用子类中的getter方法
//
//            //需求1 - 只要id是一样的,就认为是同一个对象
////            if(this.id == s.getId())
////                return true;
//
//            //需求2 - id和sno俩个属性同时一样,才认为是同一个对象
//            //注意点:字符串的比较使用equals - java.lang.String类里面也重写了equals方法
//            if(this.id == s.getId() && this.sno.equals(s.getSno()))
//                return true;
//        }
//        return false;
//    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (id != student.id) return false;
        return sno != null ? sno.equals(student.sno) : student.sno == null;
    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + (sno != null ? sno.hashCode() : 0);
        return result;
    }
}

